Ao longo do semestra fomos monitorando o a florada na área anteriormente estuda. Sempre observando as condições climáticas. Mas conhecimento prévio sobre a culura do café, que fisiologicamente, ocorrem 3 floradas.
O objetivo da prática é obter dados de levantamento GNSS das lavouras de café e monitorar a segunda floração com drone e câmera RGB e térmica (flyr).
Os dados com coordenadas dos pontos de controle no campo são preparados para utilização em um sistema de correção geométrica de imagens. Os dados de temperatura in situ foram obtidos com termômetro em alguns pontos do campo simultaneamente à coleta de dados do drone. Os dados de temperatura foram georreferenciados com GNSS. A coleta de dados foi realizada no dia da terceira floração, dia 01/11/2023, por volta das 11h59, horário de Brasília. Na mesma área antes observada. O painel de cultivares da UFLA.
Para a relização da tarefa foram utilizados os pacotes a seguir
library(terra)
## terra 1.7.62
library(viridis)
## Loading required package: viridisLite
No pacote terra existe a definição de um conjunto de classes para representar dados espaciais. Existem uma série de classes com nomes que começam com Spat.Para dados vetoriais, a classe utilizada é SpatVector. Essas classes representam geometrias, bem como atributos (variáveis) que descrevem as geometrias. Na linguagem R é possível criar objetos SpatVector a partir de pontos de levantamento GNSS realizados no painel de cultivares da UFLA.
Os dados de longitude e latitude foram medidos em campo, utilizando o sistema GNSS, na região central dos pontos de controle. Os pontos de medição de temperatura do ar com termômetro digital foram pré definidos e após unidos em um único objeto com a função cbind. Criando então os objetos “lat” e “lon”, para as respectivas latitudes e longitudes de cada ponto.
lat <- c(7652768.185, 7652834.197, 7652805.523, 7652782.826, 7652742.534)
lon <- c(502994.523, 503063.957, 503088.414, 503039.389, 503022.767)
lonlat <- cbind(lon, lat)
Em seguida os pontos de temperatura para cada latitude e
longitude nomeando os objetos como “tlat” e “tlon”. E também utilizando
a função cbind para unir temperaturas da latitude e longitude.
tlat <- c(7652744.450, 7652748.671, 7652752.566, 7652752.925, 7652754.646, 7652756.400, 7652747.828)
tlon <- c(503017.621, 503017.033, 503015.326, 503018.141, 503015.655, 503011.592, 503007.671)
tlonlat <- cbind(tlon, tlat)
Os dados de longitude e latitude foram convertidos em SpatVector
com a função vect.
pts <- vect(lonlat)
E na sequência os atributos desse novo objeto criado.
pts
## class : SpatVector
## geometry : points
## dimensions : 5, 0 (geometries, attributes)
## extent : 502994.5, 503088.4, 7652743, 7652834 (xmin, xmax, ymin, ymax)
## coord. ref. :
Utilizando a função vect para os dados de temperatura.
tpts <- vect(tlonlat)
Os atributos do objeto criado.
tpts
## class : SpatVector
## geometry : points
## dimensions : 7, 0 (geometries, attributes)
## extent : 503007.7, 503018.1, 7652744, 7652756 (xmin, xmax, ymin, ymax)
## coord. ref. :
Com a função geom é possível observar os dados contidos no objetos
que foram criados pts e tpts.
Abaixo os pontos de controle.
geom(pts)
## geom part x y hole
## [1,] 1 1 502994.5 7652768 0
## [2,] 2 1 503064.0 7652834 0
## [3,] 3 1 503088.4 7652806 0
## [4,] 4 1 503039.4 7652783 0
## [5,] 5 1 503022.8 7652743 0
Abaixo os dados de Temperatura.
geom(tpts)
## geom part x y hole
## [1,] 1 1 503017.6 7652744 0
## [2,] 2 1 503017.0 7652749 0
## [3,] 3 1 503015.3 7652753 0
## [4,] 4 1 503018.1 7652753 0
## [5,] 5 1 503015.7 7652755 0
## [6,] 6 1 503011.6 7652756 0
## [7,] 7 1 503007.7 7652748 0
Para atribuir o sistema de referência de coordenadas WGS 84/UTM
zona 23S (EPSG:32723). O argumento crs é utilizado.Iniciando o processo
com os pontos de controle o que será aplicado também para os dados de
temperatura.
pts <- vect(lonlat, crs = "EPSG:32723")
Verificando os atributos do objeto.
pts
## class : SpatVector
## geometry : points
## dimensions : 5, 0 (geometries, attributes)
## extent : 502994.5, 503088.4, 7652743, 7652834 (xmin, xmax, ymin, ymax)
## coord. ref. : WGS 84 / UTM zone 23S (EPSG:32723)
Utilizando o mesmo argumento para os dados de temperatura.
tpts <- vect(tlonlat, crs = "EPSG:32723")
Verificando os atributos do objeto
tpts
## class : SpatVector
## geometry : points
## dimensions : 7, 0 (geometries, attributes)
## extent : 503007.7, 503018.1, 7652744, 7652756 (xmin, xmax, ymin, ymax)
## coord. ref. : WGS 84 / UTM zone 23S (EPSG:32723)
Utilizando a Função crs, aplicada ao objeto é possivel obter
mais informações sobre o Sistema de Coordenadas. Utili
crs(tpts)
## [1] "PROJCRS[\"WGS 84 / UTM zone 23S\",\n BASEGEOGCRS[\"WGS 84\",\n DATUM[\"World Geodetic System 1984\",\n ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n LENGTHUNIT[\"metre\",1]]],\n PRIMEM[\"Greenwich\",0,\n ANGLEUNIT[\"degree\",0.0174532925199433]],\n ID[\"EPSG\",4326]],\n CONVERSION[\"UTM zone 23S\",\n METHOD[\"Transverse Mercator\",\n ID[\"EPSG\",9807]],\n PARAMETER[\"Latitude of natural origin\",0,\n ANGLEUNIT[\"degree\",0.0174532925199433],\n ID[\"EPSG\",8801]],\n PARAMETER[\"Longitude of natural origin\",-45,\n ANGLEUNIT[\"degree\",0.0174532925199433],\n ID[\"EPSG\",8802]],\n PARAMETER[\"Scale factor at natural origin\",0.9996,\n SCALEUNIT[\"unity\",1],\n ID[\"EPSG\",8805]],\n PARAMETER[\"False easting\",500000,\n LENGTHUNIT[\"metre\",1],\n ID[\"EPSG\",8806]],\n PARAMETER[\"False northing\",10000000,\n LENGTHUNIT[\"metre\",1],\n ID[\"EPSG\",8807]]],\n CS[Cartesian,2],\n AXIS[\"(E)\",east,\n ORDER[1],\n LENGTHUNIT[\"metre\",1]],\n AXIS[\"(N)\",north,\n ORDER[2],\n LENGTHUNIT[\"metre\",1]],\n USAGE[\n SCOPE[\"Engineering survey, topographic mapping.\"],\n AREA[\"Between 48°W and 42°W, southern hemisphere between 80°S and equator, onshore and offshore. Brazil.\"],\n BBOX[-80,-48,0,-42]],\n ID[\"EPSG\",32723]]"
Dados de atributos como altitude e um número de identificação para cada ponto foram adicionados aos dados criando um data.frame.
alt <- c(937.827, 938.115, 941.412, 940.140, 940.995)
df <- data.frame(ID = 1:nrow(lonlat), altitude = alt)
Objeto criando com a altitude e a identificação.
df
## ID altitude
## 1 1 937.827
## 2 2 938.115
## 3 3 941.412
## 4 4 940.140
## 5 5 940.995
Criando o data frame com os dados de temperatura e altitude
talt <- c(940.590, 940.263, 940.052, 940.173, 940.084, 939.844, 939.747)
t <- c(31.5, 29.1, 34.3, 29.7, 33.5, 32.3, 40.7)
tdf <- data.frame(ID = 1:nrow(tlonlat), altitude = talt, temperatura = t)
Visializando o data frame,
tdf
## ID altitude temperatura
## 1 1 940.590 31.5
## 2 2 940.263 29.1
## 3 3 940.052 34.3
## 4 4 940.173 29.7
## 5 5 940.084 33.5
## 6 6 939.844 32.3
## 7 7 939.747 40.7
Abaixo foi combinado o data.frame criado com o objeto SpatVector
de pontos espaciais. Primeiro com os pontos de controle e após com os
dados de temperatura.
pt <- vect(lonlat, atts = df, crs = "EPSG:32723")
Verificando os atributos do objeto.
pt
## class : SpatVector
## geometry : points
## dimensions : 5, 2 (geometries, attributes)
## extent : 502994.5, 503088.4, 7652743, 7652834 (xmin, xmax, ymin, ymax)
## coord. ref. : WGS 84 / UTM zone 23S (EPSG:32723)
## names : ID altitude
## type : <int> <num>
## values : 1 937.8
## 2 938.1
## 3 941.4
Mesma função utilizando os dados de temperatura.
tpt <- vect(tlonlat, atts = tdf, crs = "EPSG:32723")
Verificando os atributos do objeto
tpt
## class : SpatVector
## geometry : points
## dimensions : 7, 3 (geometries, attributes)
## extent : 503007.7, 503018.1, 7652744, 7652756 (xmin, xmax, ymin, ymax)
## coord. ref. : WGS 84 / UTM zone 23S (EPSG:32723)
## names : ID altitude temperatura
## type : <int> <num> <num>
## values : 1 940.6 31.5
## 2 940.3 29.1
## 3 940.1 34.3
## Exportando os Pontos de Controle e Temperatura Os objetos da
classe SpatVector podem ser exportados para um diretório localde
interesse com a função writeVector.
Exportando os Pontos de
Controle
writeVector(pt, "/home/vitor/Disciplinas_especiais_UFLA/geomatica/tarefa_04/pt.shp", overwrite=TRUE)
Exportando os dados de Temperatura
writeVector(tpt, "/home/vitor/Disciplinas_especiais_UFLA/geomatica/tarefa_04/tpt.shp", overwrite=TRUE)
Os pontos criados foram mapeados com a função plot.
Pontos de
Controle
plot(pt, col = "blue")
Temperatura nos Pontos de Controle
plot(tpt, col = "red")
Pontos de Controle na cor azul, e temperatura na cor vermelha.
plot(pt, col = "blue")
plot(tpt, add = T, col = "red")
Imagem RGB da terceira florada com referência dos Pontos de Controle
e Temperatura.
Endereço da imagem já salva em servidor local.
rgb_imagem <- rast("/home/vitor/Disciplinas_especiais_UFLA/geomatica/imagem_drone/Florada_03/3_Florada_03112023/Campus-Ufla-03-11-2023-all-RGB/odm_orthophoto/odm_orthophoto.tif")
Locais onde foram realizados os Pontos de Controle na cor azul e
os pontos de Temperatura em vermelho.
# Plot da imagem raster RGB
plotRGB(rgb_imagem, r = 1, g = 2, b = 3)
# Adiciona os pontos de controle na cor azul
points(pt, col = "blue")
# Adiciona a temperatura na cor vermelha
points(tpt, col = "red")
Uma análise geométrica de dados geométricos é utilizada para criar um
arquivo de contorno da área de interesse a partir de conversões de
vértices de pontos definidos por pontos de controle 1,2,3,5 ao redor da
lavoura cafeeira em polígonos.
No R, um “objeto array”
refere-se a uma estrutura de dados multidimensional que pode conter
elementos de um único tipo de dado. Ao contrário de matrizes
bidimensionais, que possuem duas dimensões (linhas e colunas), arrays
podem ter mais de duas dimensões. Um array pode ser visto como uma
generalização de uma matriz. Os valores de longitude e de latitude dos
vértices 1,2,3,5 são organizados em um objeto array.
lonp <- c(502994.523, 503063.957, 503088.414, 503022.767)
latp <- c(7652768.185, 7652834.197, 7652805.523, 7652742.534)
lonlatp <- cbind(lon, lat)
Um banco de dados com identificador de atributos de polígonos
criado com a função data.frame.
dfp <- data.frame(ID = 1)
Uma função vetorial é utilizada para criar um polígono espacial
com atributos ao redor da lavoura do painel de cultivares de café da
UFLA.
pol <- vect(lonlatp, "polygons", atts = dfp, crs= "epsg:32723")
Verificando as propiedades do objeto criado.
pol
## class : SpatVector
## geometry : polygons
## dimensions : 1, 1 (geometries, attributes)
## extent : 502994.5, 503088.4, 7652743, 7652834 (xmin, xmax, ymin, ymax)
## coord. ref. : WGS 84 / UTM zone 23S (EPSG:32723)
## names : ID
## type : <num>
## values : 1
O poligno será exportado para um diretório local utilizando a
função “writeVector”
writeVector(pol, "/home/vitor/Disciplinas_especiais_UFLA/geomatica/tarefa_04//pol.shp", overwrite=TRUE)
O ortomosaico obtido em levantamento e processado no Software Open Drone Map é importado do servidor local para o R com a função “rast”.
rgb_03_11_23 <- rast("/home/vitor/Disciplinas_especiais_UFLA/geomatica/imagem_drone/Florada_03/3_Florada_03112023/Campus-Ufla-03-11-2023-all-RGB/odm_orthophoto/odm_orthophoto.tif")
Verificando as propriedades da imagem.
rgb_03_11_23
## class : SpatRaster
## dimensions : 4070, 4223, 4 (nrow, ncol, nlyr)
## resolution : 0.04999767, 0.04999282 (x, y)
## extent : 502940, 503151.1, 7652677, 7652880 (xmin, xmax, ymin, ymax)
## coord. ref. : WGS 84 / UTM zone 23S (EPSG:32723)
## source : odm_orthophoto.tif
## names : red, green, blue, odm_orthophoto_4
## min values : 0, 0, 0, ?
## max values : 255, 255, 255, ?
Composições coloridas são obtidas com a função plotRGB. A partir das propiedades da imagem podemos verificar qual banda é o Red, green e blue. E a partir daí fazer a composição. Um realce linear é aplicado a dados de imagem.
plotRGB(rgb_03_11_23, r= 1, g= 2, b=3, stretch = "lin")
Composição colorida RGB de ortomosaico georreferenciado obtido com drone no dia 3 de novembro de 2023. A imagem apresenta uma alta exposição de luz sendo necessário conhecimentos sobre os príncipios da fotografia, para regular adequadamente o equipamento. Principalmente a exposição de luz.
A função “draw” pode ser utilizada para definir uma região em que será dado o zoom na imagem. Por se tratar de um drone, com boa resulução espacial. Esse recurso pode ser interressante para verificar alguns atributos especificos na lavoura.
e <- ext(503035.860092809, 503066.697601027, 7652773.41085155, 7652801.78135911)
plotRGB(rgb_03_11_23, r = 1, g = 2, b = 3, ext = e, stretch = "lin")
A partir do objeto “e”, foram definidas 4 coordenadas x e y para que
fosse aplicado esse zoom. Pela imagem ampliada, é possível verificar
falhas no plantio e solo exposto em alguns pontos da lavoura.
O modelo digital de elevação da superfície criado a partir do levantamento com sobreposição de imagens é importado no R com a função rast. Lembrando que as imagens foram ortoretificadas a partir do Software Open Drone Map.
alt_03_11_23 <- rast("/home/vitor/Disciplinas_especiais_UFLA/geomatica/imagem_drone/Florada_03/3_Florada_03112023/Campus-Ufla-03-11-2023-all-RGB/odm_dem/dsm.tif")
Verificando as propiedades da imagem.
alt_03_11_23
## class : SpatRaster
## dimensions : 4069, 4222, 1 (nrow, ncol, nlyr)
## resolution : 0.05, 0.05 (x, y)
## extent : 502940, 503151.1, 7652677, 7652880 (xmin, xmax, ymin, ymax)
## coord. ref. : WGS 84 / UTM zone 23S (EPSG:32723)
## source : dsm.tif
## name : dsm
O modelo digital de elevação da superfície é mapeado com função plot. Uma paleta é utilizada no mapeamento para verificar a diferença.
#Imagem como modelo digital de elevação
plot(alt_03_11_23, col = topo.colors(256))
#Pontos de controle na cor azul
points(pt, col = "black")
# Pontos de temperatura na cor vermelha
points(tpt, col = "red")
Pontos de temperatura na cor vermelha e pontos de controle na cor
preta.
Efetuando o zoom na mesma área definida com o objeto
“e” acima. O modelo digital de elevação da superfície é mapeado com
zoom.
plot(alt_03_11_23, col = topo.colors(256), ext = e)
O ortomosaico termal obtido no mesmo levantamento de dados é importado no R com a função “rast”, utilizando o pacote terra. Os pontos de controle não foram usados para produzir o ortomosaico. Tornando-se necessário explorar técnicas de análise geométrica de imagens para realizar o georreferenciamento da imagem termal. Os resultados de monitoramento com a câmera flyr são convertidos em um modelo de dados RGB ao importar os dados com a função rast.
flyr_03_11_23 <- rast("/home/vitor/Disciplinas_especiais_UFLA/geomatica/imagem_drone/Florada_03/3_Florada_03112023/Campus-Ufla-03-11-2023-all-Termal/odm_orthophoto/odm_orthophoto.tif")
Verificando as propriedades da imagem Termal
flyr_03_11_23
## class : SpatRaster
## dimensions : 1911, 2022, 4 (nrow, ncol, nlyr)
## resolution : 0.06956647, 0.06956909 (x, y)
## extent : 502968.9, 503109.5, 7652719, 7652852 (xmin, xmax, ymin, ymax)
## coord. ref. : WGS 84 / UTM zone 23S (EPSG:32723)
## source : odm_orthophoto.tif
## names : red, green, blue, odm_orthophoto_4
## min values : 0, 0, 0, ?
## max values : 255, 237, 255, ?
A imagem termal é mapeada com a função plotRGB. Os pontos de
temperatura levantados na lavoura são mapeados com a função points.
#Imagem Termal
plotRGB(flyr_03_11_23, r = 1, g = 2, b = 3)
#Pontos de temperatura cor braca
points(tpt, col = "white", cex = 2)
#Pontos de Temperatura numerados cor preta
text(tpt, halo=TRUE, col="black", hw=0.2)
Comparando com a imagem do modelo de elevação digital, os pontos de temperatura aparecem fora do ponto correto sendo necessário aplicar uma correção.